---
title: ServiceResponse
summary: API reference for ServiceResponse.
status: draft
owner: SAIF BOF documentation team
last_reviewed: 2026-08-21
library: SAIF.Application
reference_type: embedded
---

# ServiceResponse

`ServiceResponse` aggregates `ServiceMessage` entries produced during a service-style operation into a single result contract, with type-filtered accessors for errors, warnings, informational messages, and environment errors. It also converts unhandled exceptions into environment-type messages via `ProcessException`.

## Purpose
- Provide a service-oriented result contract (success flag, request ID, and a categorized message collection) distinct from `AppManagerBase`'s UI-message-string approach ([Build a service-style result](../../operations-processes.md)).
- Convert an unhandled exception (and its inner exceptions) into `ServiceMessage` entries via `ProcessException`.

## Context
- Namespace: `SAIF.Application`
- Assembly/package: `SAIF.Application` (embedded library, in `Service Based\`)

## Public members
| Member | Signature | Purpose |
| --- | --- | --- |
| `Result` | `Public Result As Boolean` | Public field indicating overall success (`True` by default); callers typically set this to `False` on failure. |
| `RequestID` | `Public RequestID As String` | Public field carrying a caller-assigned request correlation identifier. |
| `Messages` | `Public ReadOnly Property Messages As IEnumerable(Of ServiceMessage)` | Exposes the full, unfiltered collection of accumulated messages. |
| `Errors` | `Public ReadOnly Property Errors As IEnumerable(Of ServiceMessage)` | Filters `Messages` to only `ServiceMessageType.Error` entries. |
| `Warnings` | `Public ReadOnly Property Warnings As IEnumerable(Of ServiceMessage)` | Filters `Messages` to only `ServiceMessageType.Warning` entries. |
| `EnvironmentalErrors` | `Public ReadOnly Property EnvironmentalErrors As IEnumerable(Of ServiceMessage)` | Filters `Messages` to only `ServiceMessageType.Environment` entries. |
| `InformationalMessages` | `Public ReadOnly Property InformationalMessages As IEnumerable(Of ServiceMessage)` | Filters `Messages` to only `ServiceMessageType.Information` entries. |
| `ProcessException` | `Public Sub ProcessException(ex As Exception)` | Records the exception's message/type as an Environment-type `ServiceMessage`, then loops over inner exceptions to record each in turn. |
| `AddErrorMessage` | `Public Sub AddErrorMessage(inKey As String, inMessage As String)` | Appends a new `Error`-type `ServiceMessage` to the internal list. |
| `AddWarningMessage` | `Public Sub AddWarningMessage(inKey As String, inMessage As String)` | Appends a new `Warning`-type `ServiceMessage` to the internal list. |
| `AddInformationMessage` | `Public Sub AddInformationMessage(inKey As String, inMessage As String)` | Appends a new `Information`-type `ServiceMessage` to the internal list. |
| `AddEnvironmentMessage` | `Public Sub AddEnvironmentMessage(inKey As String, inMessage As String)` | Appends a new `Environment`-type `ServiceMessage` to the internal list. |

## Behavioral notes
- `ProcessException` loops `Do While LocalEX IsNot Nothing` but re-reads `ex.InnerException` (not the current local exception) on each iteration, which would infinite-loop if `ex.InnerException` is non-Nothing; it could not be confirmed whether this path has ever executed against a real multi-level exception chain at runtime.**

## Constraints and usage notes
- Callers should be aware of the potential infinite loop in `ProcessException` when handling exceptions with a populated `InnerException` chain.**

> **Note:** Statements marked with ** could not be confirmed; treat as unknown until verified.

## Sources
- `SAIF.Application\Service Based\ServiceResponse.vb`
